package mx.unam.acatlan.poo.objetos.geometricos;

/**
 * Un punto en el plano.
 * 
 * @author "Carlos Alegria Galicia"
 *
 */
public class Punto {
	
	/**
	 * La coordenada del punto en el eje X
	 */
	private int x;
	
	/**
	 * La coordenada del punto en el eje Y
	 */
	private int y;
	
	/**
	 * Crea un punto con las coordenadas especificadas en los argumentos.
	 * 
	 * @param x
	 * @param y
	 */
	public Punto(int x, int y) {
		this.x = x;
		this.y = y;
	}

	/**
	 * Obtiene la coordenada del punto en el eje X
	 * 
	 * @return La coordenada del punto en el eje X
	 */
	public int getX() {
		return x;
	}

	/**
	 * Establece la coordenada del punto en el eje X
	 * 
	 * @param x El valor de la coordenada a establecer
	 */
	public void setX(int x) {
		this.x = x;
	}

	/**
	 * Obtiene la coordenada del punto en el eje Y
	 * 
	 * @return La coordenada del punto en el eje Y
	 */
	public int getY() {
		return y;
	}

	/**
	 * Establece la coordenada del punto en el eje Y
	 * 
	 * @param y El valor de la coordenada a establecer
	 */

	public void setY(int y) {
		this.y = y;
	}
	
	/**
	 * Rota el punto en sentido opuesto al de las manecillas del reloj, por el
	 * angulo especificado
	 * 
	 * @param angulo El angulo que se rotara el punto
	 */
	public void rotar(double angulo) {
		this.x = (int) Math.round(this.x * Math.cos(angulo) - this.y * Math.sin(angulo));
		this.y = (int) Math.round(this.y * Math.cos(angulo) + this.x * Math.sin(angulo));
	}
}
